// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Animation/AnimInstance.h"
#include "GameplayEffectTypes.h"
#include "LyraAnimInstance.generated.h"

class UAbilitySystemComponent;

/**
 * ULyraAnimInstance
 *
 *	该项目使用的基础游戏动画实例类。
 */
UCLASS(Config = Game)
class ULyraAnimInstance : public UAnimInstance
{
	GENERATED_BODY()

public:

	ULyraAnimInstance(const FObjectInitializer& ObjectInitializer);

	/**
	 * 使用能力系统组件初始化动画实例。
	 * @param ASC 能力系统组件指针
	 */
	virtual void InitializeWithAbilitySystem(UAbilitySystemComponent* ASC);

protected:

#if WITH_EDITOR
	/**
	 * 数据验证函数，用于检查数据的有效性。
	 * @param Context 数据验证上下文
	 * @return 返回数据验证结果
	 */
	virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
#endif // WITH_EDITOR

	/**
	 * 动画实例原生初始化函数。
	 */
	virtual void NativeInitializeAnimation() override;
	/**
	 * 动画实例原生更新函数。
	 * @param DeltaSeconds 帧间隔时间
	 */
	virtual void NativeUpdateAnimation(float DeltaSeconds) override;

protected:

	// 可以映射到蓝图变量的游戏标签。这些变量会在标签添加或移除时自动更新。应使用这些而不是手动查询游戏标签。
	UPROPERTY(EditDefaultsOnly, Category = "GameplayTags")
	FGameplayTagBlueprintPropertyMap GameplayTagPropertyMap; // 游戏标签属性映射

	UPROPERTY(BlueprintReadOnly, Category = "Character State Data")
	float GroundDistance = -1.0f; // 地面距离
};